package com.lemon.common.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

/**
 * 异常枚举
 * 需要扩展的异常的话直接添加枚举就行了，不需要再去写个异常类那么麻烦
 * 状态码参见 Rest 规范
 *
 * @author ymh
 * @date 2019-3-22 17:52
 */
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum ExceptionEnum {

    /**
     * Rest 风格状态码
     * <p>
     * 2xx (成功类别)
     * 200 Ok：标准的 HTTP 响应，表示 GET、PUT 或 POST 的处理成功。
     * 201 Created：在创建新实例时，应返回此状态代码。例如，使用 POST 方法创建一个新的实例，应该始终返回 201 状态码。
     * 204 内容不存在：表示请求已被成功处理，但并未返回任何内容。
     * <p>
     * 3xx (重定向类别)
     * 304 未修改：表示客户端的响应已经在其缓存中。 因此，不需要再次传送相同的数据。
     * <p>
     * 4xx (客户端错误类别)
     * 400 错误请求：表示客户端的请求没有被处理，因为服务器不能理解客户端请求的是什么。
     * 401 未授权：表示客户端不被允许访问该资源，需要使用指定凭证重新请求。
     * 403 禁止访问：表示请求是有效的并且客户端已通过身份验证，但客户端不被允许以任何理由访问对应页面或资源。 例如有时授权的客户端不被允许访问服务器上的目录。
     * 404 未找到：表示所请求的资源现在不可用。
     * 410 资源不可用：表示所请求的资源后续不再可用，该资源已被移动。
     * <p>
     * 5xx（服务器错误类别）
     * 500是服务器内部错误，表示请求已经被接收到了，但服务器被要求处理某些未预设的请求而完全混乱。
     * 503服务不可用表示服务器已关闭或无法接收和处理请求。大多数情况是服务器正在进行维护。
     */
    LOGIN_FAILED(400, "用户名或密码错误"), // 登录失败
    NOT_LOGIN(401, "用户未登陆"), // 用户未登陆

    CREATE_FAILED(500, "创建失败"), // 创建失败
    UPDATE_FAILED(500, "修改失败"), // 修改失败
    DELETE_FAILED(500, "删除失败"), // 删除失败

    UPLOAD_FILE_NOT_EXIST(400, "上传文件不存在"), // 上传文件不存在
    UPLOAD_FAILED(500, "文件上传失败"), // 文件上传失败
    ;
    private int code;
    private String msg;
}
